#include "Thread.hpp"
#include<unordered_map>
#include<memory>

#define NUM 10

// void Count()
// {
//     std::cout <<"我是自定义封装模拟线程" << std::endl;
// }

// int main()
// {
//     ThreadMoudle::Thread t(Count);
//     t.start();
//     std::cout << t.Name() << "is running" << std::endl;
//     sleep(1);
//     t.Join();
//     std::cout << "Join thread : " << t.Name() << std::endl;
//     return 0;
// }

//using Thread_ptr_t = std::shared_ptr<ThreadMoudle::Thread>;
//智能指针来管理Thead类所创建的对象, 定义别名Thread_ptr_t
//using Thread_ptr_t = ThreadMoudle::Thread; //只是起别名


//先描述, 在组织
// std::unordered_map<std::string, Thread_ptr_t> threads;
// //创建多线程呢
// int main()
// {
//     for(int i = 0; i < NUM; i++)
//     {
//         //返回一个指向一个该类型的指针
//         Thread_ptr_t t = std::make_shared<ThreadMoudle::Thread>([](){
//             while(true)
//             {
//                 std::cout << "Hello world" << std::endl;
//                 sleep(1);
//             }
//         });
//         threads[t->Name()] = t;
//     }

//     for(auto &thread: threads)
//     {
//         thread.second->start();
//     }
//     for(auto &thread: threads)
//     {
//         thread.second->Join();
//     }

//     return 0;
// }

class threadData
{
public:
    int max;
    int start;
};

void Count(threadData td)
{
    for(int i = td.start; i < td.max; i++)
    {
        std::cout << "i == " << i << std::endl;
        sleep(1);
    }
}

int main()
{
    threadData td;
    td.max = 60;
    td.start = 50;
    ThreadMoudle::Thread<threadData> t(Count, td);
    t.start();
    t.Join();
}